package com.intretech.umsin.datasource.codemapping.service;


import com.intretech.umsin.datasource.codemapping.entity.CodeNameMap;
import com.intretech.umsin.datasource.codemapping.entity.MappingConfig;
import com.intretech.umsin.datasource.codemapping.entity.RootClassInfo;

import java.util.List;
import java.util.Set;

/**
 * @version V1.0
 * @InterfaceName: CodeMappingProcessorService
 * @Description:(CodeMappingProcessorService 对应提供的服务接口)
 * @author: 李启联
 * @date: 2020-03-16 14:05
 * @Copyright: Copyright (c) 2020
 */
public interface CodeMappingService {


    /**
     * 得到目标映射对象列表
     * @param targetClassKeyProperty 名"在需要查找目标对象所对应的键(Key)属性名
     * @param targetClassFieldProperty "名"在需要查找目标对象所对应的字段属性名
     * @param targetClass "名"需要查找目标对象类型
     * @param targetClassName "名"需要查找目标对象全类名
     * @param fieldCodePropertyVal "码"在类中对应的字段对应的值,为减轻数据库压力(在方法返回列表对象时，一次性返回)
     * @return
     */
    List<CodeNameMap> getCodeNameMaps(String targetClassKeyProperty, String targetClassFieldProperty, Class targetClass, String targetClassName, Set<Object> fieldCodePropertyVal);

    /**
     * 得到目标映射对象 Code-Name 码名信息
     * @param targetClassKeyProperty 名"在需要查找目标对象所对应的键(Key)属性名
     * @param targetClassFieldProperty "名"在需要查找目标对象所对应的字段属性名
     * @param targetClass "名"需要查找目标对象类型
     * @param targetClassName "名"需要查找目标对象全类名
     * @param fieldCodePropertyVal "码"在类中对应的字段对应的值,为减轻数据库压力(在方法返回列表对象时，一次性返回)
     * @return
     */
    CodeNameMap getCodeNameMap(String targetClassKeyProperty, String targetClassFieldProperty, Class targetClass, String targetClassName, Object fieldCodePropertyVal);


    /**
     * 对需要处理对象作[码-名]映射
     * @param result 需要处理对象
     * @param mappingConfigs 对应的映射配置
     * @param rootClassInfo 待映射对象实体封装对象
     * @return
     */
    Object processDoMapping(Object result, List<MappingConfig> mappingConfigs, RootClassInfo rootClassInfo);

  }

